#include "LotoConfiguration.h"
#include <string.h>

LotoConfiguration::LotoConfiguration() : GameConfiguration()
{
	m_SorteoLotoConf = NULL;
    m_PathImageButton = "";
	m_PathAppDllName = "";
	m_CodigoAgente = 0;
	m_NombreAgente = "";
	m_DireccionAgente = "";
	m_LocalidadAgente = "";
	m_NumeroTerminal = 0;
	m_NumeroTarjeta = 0;
	m_NroSecuencia = 0;
	m_TipoTerminal = 0x20;
	m_NumTerminalAgencia = 0x20;
	m_Version = 0x20;
	m_SubVersion = 0x20;
}

LotoConfiguration::~LotoConfiguration()
{
	if ( m_SorteoLotoConf )
		delete m_SorteoLotoConf;
}


void LotoConfiguration::deserialize( QByteArray paqueteLOTO )
{
	// RMUEVO DATOS DEMAS, esto debe hacerlo el modulo de comunicaciones
	paqueteLOTO.remove(0,6);
	paqueteLOTO.remove( paqueteLOTO.size() - 3 , 3 );

	BMMemoryUtils memoUtils;
	int contadorDatos = 0;

	char * bufferConfiguration = (char*) malloc( paqueteLOTO.size() + 1 );
	memset( bufferConfiguration , '\0' , paqueteLOTO.size() + 1 );
	
	for ( int i = 0 ; i < paqueteLOTO.size() ; i++ )
		bufferConfiguration[i] = paqueteLOTO.at(i);

	memoUtils.MemoryCopy( &m_IdMsg , bufferConfiguration , sizeof(m_IdMsg) );
	contadorDatos += sizeof(m_IdMsg);

	memoUtils.MemoryCopy( &m_Transaccion , bufferConfiguration + contadorDatos, sizeof(m_Transaccion) );
	contadorDatos += sizeof(m_Transaccion);

// 1 y 2

	memoUtils.MemoryCopy( &m_ErrorCode , bufferConfiguration + contadorDatos, sizeof(m_ErrorCode) );
	contadorDatos += sizeof(m_ErrorCode);

	if ( m_ErrorCode == 0 )
	{

	// 3 al 20

		memset( m_IdTransaccion , '\0' , sizeof(m_IdTransaccion) );
		memoUtils.MemoryCopy( m_IdTransaccion , bufferConfiguration + contadorDatos , SIZE_ID_TRANSACTION , BIG_ENDIAN);
		contadorDatos += SIZE_ID_TRANSACTION;

	// 21

		memoUtils.MemoryCopy( &m_dia, bufferConfiguration + contadorDatos, sizeof(m_dia) );
		contadorDatos += sizeof(m_dia);

	// 22
	
		memoUtils.MemoryCopy( &m_mes, bufferConfiguration + contadorDatos, sizeof(m_mes) );
		contadorDatos += sizeof(m_mes);

	// 23 y 24
	
		memoUtils.MemoryCopy( &m_anio , bufferConfiguration + contadorDatos , sizeof(m_anio) );
		contadorDatos += sizeof(m_anio);

	// 25
	
		memoUtils.MemoryCopy( &m_hora , bufferConfiguration + contadorDatos , sizeof(m_hora) );
		contadorDatos += sizeof(m_hora);

	// 26
	
		memoUtils.MemoryCopy( &m_minutos , bufferConfiguration + contadorDatos , sizeof(m_minutos) );
		contadorDatos += sizeof(m_minutos);

	// 27
	
		memoUtils.MemoryCopy( &m_segundos , bufferConfiguration + contadorDatos , sizeof(m_segundos) );
		contadorDatos+=sizeof(m_segundos);
	
	// copio los datos restantes para que los deserialice SorteoLotoConfiguration
		QByteArray dataSorteoLoto = "";
		for ( int j = contadorDatos ; j < paqueteLOTO.size() ; j++ )
			dataSorteoLoto.append( paqueteLOTO.at(j) );

		m_SorteoLotoConf = new SorteoLotoConfiguracion();
		m_SorteoLotoConf->deserialize( dataSorteoLoto );
		m_SorteoLotoConf->save();
	}
	else
	{
		// obtengo decripcion del error
		char descripcion[512];
		memset( descripcion , '\0' , 512 );
		memoUtils.MemoryCopy( descripcion , bufferConfiguration + contadorDatos , paqueteLOTO.size() - contadorDatos , BIG_ENDIAN );
		contadorDatos += paqueteLOTO.size() - contadorDatos;
		m_ErrorDescription = descripcion;
	}

	free( bufferConfiguration );
}

void LotoConfiguration::save()
{
	
}

void LotoConfiguration::update( QByteArray data )
{

}
